对象序列化

android中数据传输中需要了解的数据序列化,我们知道android开发过程中不同Activity之间传输数据可以通过Intent对象的put**方法传递,对于java的八大基本数据类型(char int float double long short boolean byte)传递是没有问题的,但是如果传递比较复杂的对象类型(比如对象,比如集合等),那么就可能存在问题,而这时候也就引入了数据序列化的概念。

序列化的定义:

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

简单来说就是我们的数据在传输的时候需要将信息转化为可以传输的数据,然后在传输的目标方能够反序列化将数据还原回来,这里的将对象状态信息转换为可传输数据的过程就是序列化(简单说序列化就是将java 对象转成字节流),将可传输的数据逆还原为对象的过程就是反序列化(反序列化就是将传输字节流转成java 对象)。

为什么需要序列化:

知道前面的序列化定义,内存对象什么需要实现序列化呢?

  • 永久性保存对象,保存对象的字节序列到本地文件。

  • 通过序列化对象在网络中传递对象。

  • 通过序列化对象在进程间传递对象。

实现序列化的两种方式:

那么我们如何实现序列化的操作呢?在android开发中我们实现序列化有两种方式:

  • 实现Serializable接口

  • 实现parcelable接口

两种序列化方式的区别:

都知道在android studio中序列化有两种方式:serializable与parcelable。那么这两种实现序列化的方式有什么区别呢?下面是这两种实现序列化方式的区别:

  1. Serializeble是java的序列化方式,Parcelable是android特有的序列化方式;

  2. 在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。

  3. Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

  4. Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable。

最后还有一点就是Serializeble序列化的方式比较简单,直接集成一个接口就好了,而parcelable方式比较复杂,不仅需要集成Parcelable接口还需要重写里面的方法。

总结:

  • 可以通过实现Serializable和Parcelable接口的方式实现序列化

  • 实现Serializable接口是java中实现序列化的方式,而实现Parcelable是android中特有的实现序列化的方式,更适合android环境

  • 实现Serializable接口只需要实现该接口即可无需其他操作,而实现Parcelable接口需要重写相应的方法

热评文章